package com.nancy.java_design.singleton.demo3;

/**
 * 单例模式
 *  懒汉式
 */
public class Singleton {
    // 1.私有化构造方法
    private Singleton() {
    }

    // 2.创建私有化对象
    private static Singleton instance;

    // 3.对外提供公共方法
    public static Singleton getInstance() {
        if (instance == null) {
            //线程不安全，多线程情况下可能创建多个对象，造成创建多个对象
            //线程1进入if判断，还没执行完，instance依然为null，线程2获得cpu执行权，也进入if判断
            instance = new Singleton();
        }
        return instance;
    }

    // 4.同步方法，解决线程不安全
    public static synchronized Singleton getInstance2() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
